// 保存token
// 导入获取token的方法
import { getToken, setToken, delToken } from '@/utils/auth'
// ,setTimeStamp,removeTimeStamp
// 导入网络请求
import { loginApi, getInfoApi } from '@/api/user'
import { getBaseInfoApi } from '@/api/employees'

const state = {
  //存储token
  token: getToken(), //如果在cookies中已经有了，直接读取
  userInfo: {} //给的是一个空对象，不建议设置为null，因为有可能会造成代码的错误
}
const mutations = {
  // 保存token
  SET_TOKEN (state, payload) {
    // 只是将token保存在内存中，刷新后就没了
    state.token = payload
    // 还要保存到cookies中
    setToken(payload)
    // // 顺便保存当前时间戳
    // setTimeStamp()
  },
  // 清除token
  REMOVE_TOKEN (state, payload) {
    // 清除cookies中的token
    delToken()
    // 清除内存中的token
    state.token = ''
    // // 清除token的时间戳
    // removeTimeStamp()
  },
  // 保存userInfo
  SET_USERINFO (state, payload) {
    state.userInfo = payload
  },
  // 清除userInfo
  REMOVE_USERINFO (state) {
    state.userInfo = {}
  }
}

const actions = {
  // 保存token
  async login (context, payload) {
    // 请求登录的接口，得到返回的token，保存token
    const res = await loginApi(payload)
    // 服务器返回的是对象，token在data中，是因为axios接收到服务器返回的数据之后，会将数据包装到data中
    // 接收返回的数据其实是响应拦截器中return回来的
    context.commit('SET_TOKEN', res.data)
  },
  // 得到用户信息
  async getUserInfo (context) {
    // 发送请求得到用户信息
    const res = await getInfoApi()
    // 获取员工基本信息
    const baseRes = await getBaseInfoApi(res.data.userId)
    // 将两条数据合并到 userInfo 中
    // 保存用户信息
    context.commit('SET_USERINFO', { ...res.data, ...baseRes.data })
    // 返回用户信息
    return res
    // 这里返回现在用不上，只是为后面写代码做铺垫
  },
  // 退出登录
  logout (context) {}
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
